
    CompilerListener.implement
    (
    
        {
            /**
             * A class has been loaded and its annotations parsed successfully, 
             * though its dependencies have not yet been analysed.
             * 
             * @param {ClassFile} classFile
             */
            onVisitClass: function (classFile) 
            {
               ;
            }
            
            /**
             * A class has finished being analysed and all its dependencies
             * are satisfied, and its been added to the compilers class list
             * 
             * @param {ClassFile} classFile
             */
        ,   onLeaveClass: function (classFile) 
            {
  
            }

            /**
             * The compiler has started.
             * 
             * @param {ClassFile} entryClassFile The entry class file
             */
        ,   onStart: function (entryClassFile) 
            {
               // console.log('Starting compiler with entryClass' + entryClassFile);
            }
            
            /**
             * The compiler has completed successfully.
             * 
             * @param {Array.<ClassFile>} classList the resolved classes in order
             * @return {void}
             */
        ,   onComplete: function (classFiles) 
            {
                //console.log('compiler complete.\n' + classFiles.join('\n'));
            }
            
            /**
             * The compiler has encountered an error while compiling the 
             * application, most likely due to a failed dependency.
             * 
             * @param {Object} classFile
             * @param {Object} cause
             */
        ,   onError: function (classFile, cause) 
            {
                console.log('onError: ' + classFile + ' - ' + cause);
                if (Error.is(cause))
                    throw cause;
            }
        }
    );
    
    function CompilerListener () {;};
